Iz vesolja pričakuješ signal nezemeljske civilizacije. Utemeljeno lahko
pričakuješ, da bo sporočilo poslano v jeziku, ki uporablja angleško abecedo
26 malih črk in zadošča naslednjim pravilom:
Sporočilo je sestavljeno zgolj iz zaporedja znakov a, b, c, d, . . . , z,
ki sestavljajo besede, in iz presledkov med njimi (brez ločil).
Zaporedni znaki se vselej razlikujejo (ni podvojenih znakov).
Samoglasniki a, e, i, o, u se ne smejo stikati.
Znak x je lahko le na koncu besede.
Naloga
V funkciji pravo(niz), ki ugotovi, ali sporočilo ustreza tem pogojem, se
skriva nekaj napak. Popravi jo tako, da bo pravilno delovala.
def pravo(niz):
'''Vrne True, če besedilo v niz ustreza vseh pogojem in False sicer.'''
dovoljeni_znaki = 'abcdefghijklmnopqrstuvwxyz'
samoglasniki = ['a','e','i','o','u']
prejsnji_znak = '.'
for znak in niz:
if znak not in dovoljeni_znaki:
return False
if znak == prejsnji_znak:
return False
if znak in samoglasniki or prejsnji_znak in samoglasniki:
return False
if prejsnji_znak == 'x' and znak != ' ':
return True
prejsnji_znak = znak
return True
Vhodni podatki
Sporočilo v obliki niza.
Izhodni podatki
True, če niz ustreza vsem pravilom in False sicer.
Primer
>>> pravo('we live in same universe')
`True`
>>> pravo('can you hear us')
`False`
Uradna rešitev
def pravo(niz):
'''Vrne True, če besedilo v niz ustreza vseh pogojem in False sicer.'''
dovoljeni_znaki = 'abcdefghijklmnopqrstuvwxyz '
samoglasniki = ['a','e','i','o','u']
prejsnji_znak = ''
for znak in niz:
if znak not in dovoljeni_znaki:
return False # nedovoljen znak
if znak == prejsnji_znak:
return False # podvojen znak
if znak in samoglasniki and prejsnji_znak in samoglasniki:
return False # zaporedna samoglasnika
if prejsnji_znak == 'x' and znak != ' ':
return False # x ni na koncu besede
prejsnji_znak = znak
return True
1999.1.3 (popravi)
1. podnaloga
V besedilu iščemo besede, ki vsebujejo vsaj eno zvezdico ($*$). Izpišemo vsako
besedo z zvezdico, poleg nje pa tudi njej sledečo besedo, ne glede na to,
ali tudi sama vsebuje zvezdico ali ne.
Naloga
Popravi funkcijo besede(niz), ki izvede opisano opravilo, saj se v njej skriva
nekaj napak. Besede so ločene s presledki.
def besede(niz):
'''Izpiše besede v katerih je vsaj ena zvezdica (*) in njihove naslednike'''
vse_besede = niz.split(' ')
vsebuje_zvezdico = True
novo_besedilo = []
for beseda in vse_besede:
if vsebuje_zvezdico = True and '*' in beseda:
novo_besedilo.append(beseda)
if '*' in beseda:
vsebuje_zvezdico = True
novo_besedilo.append(beseda)
else:
vsebuje_zvezdico = False
return ''.join(novo_besedilo)
Vhodni podatki
Besedilo v obliki niza.
Izhodni podatki
Niz ustreznih besed, ločenih s presledki.
Primer
>>> besede('Dan*es je lepo vre*m*e.')
'Dan*es je vre*m*e.'
>>> besede('Ka*j s*i jedel da*nes?')
'Kaj si jedel danes?'
Uradna rešitev
def besede(niz):
'''Izpiše besede v katerih je vsaj ena zvezdica (*) in njihove naslednike'''
vse_besede = niz.split(' ')
vsebuje_zvezdico = False
novo_besedilo = []
for beseda in vse_besede:
if vsebuje_zvezdico == True and '*' not in beseda:
novo_besedilo.append(beseda)
if '*' in beseda:
vsebuje_zvezdico = True
novo_besedilo.append(beseda)
else:
vsebuje_zvezdico = False
return ' '.join(novo_besedilo)